#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

const int MOD = 1000000007;

// 预计算阶乘
vector<long long> precomputeFactorials(int n) {
    vector<long long> factorial(n + 1);
    factorial[0] = 1;
    for (int i = 1; i <= n; ++i) {
        factorial[i] = (factorial[i - 1] * i) % MOD;
    }
    return factorial;
}

// 计算给定排列的字典序排名
int main() {
    int n;
    cin >> n;
    vector<int> a(n);
    for (int i = 0; i < n; ++i) {
        cin >> a[i];
    }

    vector<long long> factorial = precomputeFactorials(n);
    long long rank = 1; // 从1开始计数
    vector<bool> used(n + 1, false); // 标记数字是否已使用

    for (int i = 0; i < n; ++i) {
        int count = 0; // 小于当前数字的未使用数字计数
        for (int j = 1; j < a[i]; ++j) {
            if (!used[j]) {
                count++;
            }
        }
        rank = (rank + count * factorial[n - 1 - i]) % MOD; // 更新排名
        used[a[i]] = true; // 标记当前数字为已使用
    }

    cout << rank << endl; // 输出结果
    return 0;
}
